home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / flashpc.exe / DEMO.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-25  |  16.6 KB  |  448 lines

  1. #include <fpclib.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <conio.h>
  6.  
  7. #define NUMBER_WINDOWS 6
  8.  
  9. void OpeningScreen( void );
  10. void DisplayWindows( void );
  11. void GetAltCtrlShft( void );
  12. void DetectToggleKeys( void );
  13. void DisplayVideoInformation( void );
  14. void UseEditSt( void );
  15. void DisplayRvsAttrScreen( void );
  16. void CheckMouse( void );
  17. void IntStr( int Num, int NDigits, char *St );
  18.  
  19. char ColorTbl[2][256] = {
  20.                                0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
  21.                               10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
  22.                               20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
  23.                               30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
  24.                               40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
  25.                               50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
  26.                               60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
  27.                               70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
  28.                               80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
  29.                               90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
  30.                              100,101,102,103,104,105,106,107,108,109,
  31.                              110,111,112,113,114,115,116,117,118,119,
  32.                              120,121,122,123,124,125,126,127,128,129,
  33.                              130,131,132,133,134,135,136,137,138,139,
  34.                              140,141,142,143,144,145,146,147,148,149,
  35.                              150,151,152,153,154,155,156,157,158,159,
  36.                              160,161,162,163,164,165,166,167,168,169,
  37.                              170,171,172,173,174,175,176,177,178,179,
  38.                              180,181,182,183,184,185,186,187,188,189,
  39.                              190,191,192,193,194,195,196,197,198,199,
  40.                              200,201,202,203,204,205,206,207,208,209,
  41.                              210,211,212,213,214,215,216,217,218,219,
  42.                              220,221,222,223,224,225,226,227,228,229,
  43.                              230,231,232,233,234,235,236,237,238,239,
  44.                              240,241,242,243,244,245,246,247,248,249,
  45.                              250,251,252,253,254,255,
  46.  
  47.                                0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
  48.                               10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
  49.                               20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
  50.                               30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
  51.                               40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
  52.                               50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
  53.                               60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
  54.                               70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
  55.                               80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
  56.                               90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
  57.                              100,101,102,103,104,105,106,107,108,109,
  58.                              110,111,112,113,114,115,116,117,118,119,
  59.                              120,121,122,123,124,125,126,127,128,129,
  60.                              130,131,132,133,134,135,136,137,138,139,
  61.                              140,141,142,143,144,145,146,147,148,149,
  62.                              150,151,152,153,154,155,156,157,158,159,
  63.                              160,161,162,163,164,165,166,167,168,169,
  64.                              170,171,172,173,174,175,176,177,178,179,
  65.                              180,181,182,183,184,185,186,187,188,189,
  66.                              190,191,192,193,194,195,196,197,198,199,
  67.                              200,201,202,203,204,205,206,207,208,209,
  68.                              210,211,212,213,214,215,216,217,218,219,
  69.                              220,221,222,223,224,225,226,227,228,229,
  70.                              230,231,232,233,234,235,236,237,238,239,
  71.                              240,241,242,243,244,245,246,247,248,249,
  72.                              250,251,252,253,254,255
  73.                         };
  74.  
  75. char WinTbl[NUMBER_WINDOWS][5] = {
  76.                                     1,  1, 40, 10,  16,
  77.                                     4,  4, 43, 13,  36,
  78.                                     7,  7, 46, 16,  56,
  79.                                    10, 10, 49, 19,  76,
  80.                                    13, 13, 52, 21,  96,
  81.                                    16, 16, 55, 23, 116
  82.                                  };
  83.  
  84. char Digits[17] = "0123456789ABCDEF";
  85.  
  86. char TCSet[32] = {   0,   7,   0,   0,   0,   0,   0,   0,
  87.                      0,   0,   0,   0,   0,   0,   0,   0,
  88.                      0,   0,   0,   0,   0,   0,   0,   0,
  89.                      0,   0,   0,   0,   0,   0,   0,   0
  90.                  };
  91. char VCSet[32] = {   0,   0,   0,   0, 255, 255, 255, 255,
  92.                    255, 255, 255, 255, 255, 255, 255, 255,
  93.                    255, 255, 255, 255, 255, 255, 255, 255,
  94.                    255, 255, 255, 255, 255, 255, 255, 255
  95.                  };
  96.  
  97.  
  98. char  Buffer[4000],CTbl[256];
  99. int   i,x,y;
  100. char  FnKeyBuf[4][320];
  101.  
  102. /*----------------------------------------------------------------*/
  103. /*                                                                */
  104. /*----------------------------------------------------------------*/
  105.  
  106. void OpeningScreen( void )
  107. {
  108.    int i;
  109.  
  110.    ClrWin( 1, 1, 80, 25, CTbl[7] );
  111.    WindowFP( 1, 1, 80, 25 );
  112.    FrameWin( '╔', '╗', '╚', '╝', '═', '║', CTbl[2] );
  113.  
  114.    ColorMsg( 20,  4, CTbl[1], "            FlashPac C Library           " );
  115.    ColorMsg( 20,  6, CTbl[2], "               Version 3.10              " );
  116.    ColorMsg( 20,  8, CTbl[3], "               Demo Program              " );
  117.    ColorMsg( 20, 15, CTbl[4], "              SimpleSoft Inc.            " );
  118.    ColorMsg( 20, 16, CTbl[4], "              1209 Poplar St             " );
  119.    ColorMsg( 20, 17, CTbl[4], "          La Crescent, MN 55947          " );
  120.    ColorMsg( 20, 18, CTbl[4], "                                         " );
  121.    ColorMsg( 19, 22, CTbl[4], "(c) Copyright 1986-89 - All Rights Reserved");
  122.    ColorMsg( 20, 24, CTbl[5], "       Press any key to continue...      " );
  123.  
  124.    while ( !DosKbdHit() ) {
  125.       FillRowAttr( 20,  4, 41, CTbl[9]  );
  126.       FillRowAttr( 20,  6, 41, CTbl[10] );
  127.       FillRowAttr( 20,  8, 41, CTbl[11] );
  128.       FillRowAttr( 20, 15, 41, CTbl[12] );
  129.       FillRowAttr( 20, 16, 41, CTbl[12] );
  130.       FillRowAttr( 20, 17, 41, CTbl[12] );
  131.       FillRowAttr( 20, 18, 41, CTbl[12] );
  132.       FillRowAttr( 19, 22, 43, CTbl[13] );
  133.  
  134.       for ( i = 0; i < 10000; i++ )
  135.       ;
  136.  
  137.       FillRowAttr( 20,  4, 41, CTbl[1] );
  138.       FillRowAttr( 20,  6, 41, CTbl[2] );
  139.       FillRowAttr( 20,  8, 41, CTbl[3] );
  140.       FillRowAttr( 20, 15, 41, CTbl[4] );
  141.       FillRowAttr( 20, 16, 41, CTbl[4] );
  142.       FillRowAttr( 20, 17, 41, CTbl[4] );
  143.       FillRowAttr( 20, 18, 41, CTbl[4] );
  144.       FillRowAttr( 19, 22, 43, CTbl[5] );
  145.  
  146.       for ( i = 0; i < 10000; i++ )
  147.       ;
  148.    }
  149. }
  150.  
  151. /*----------------------------------------------------------------*/
  152. /*                                                                */
  153. /*----------------------------------------------------------------*/
  154.  
  155. void DisplayWindows( void )
  156. {
  157.    char  St[80];
  158.    int   i,j;
  159.  
  160.    ClrWin( 1, 1, 80, 25, CTbl[7] );
  161.  
  162.    for ( i = 0; i < NUMBER_WINDOWS; i++ ) {
  163.       WindowFP( WinTbl[i][0], WinTbl[i][1], WinTbl[i][2], WinTbl[i][3] );
  164.       ClrWin( WinTbl[i][0], WinTbl[i][1], WinTbl[i][2], WinTbl[i][3], WinTbl[i][4] );
  165.       FrameWin( '╔', '╗', '╚', '╝', '═', '║', CTbl[ WinTbl[i][4] ] );
  166.  
  167.       strcpy( St, "Window - " );
  168.       itoa( i, &St[9], 10 );
  169.       DspMsg( WinTbl[i][0]+2, WinTbl[i][1]+1, St );
  170.       for ( j = 0; j < 15000; j++ )
  171.       ;
  172.    }
  173.  
  174.    ColorMsg( 20, 25, CTbl[96], "       Press any key to continue...      " );
  175.    DosKbdClr();
  176.    GetKey();
  177. }
  178.  
  179. /*----------------------------------------------------------------*/
  180. /*                                                                */
  181. /*----------------------------------------------------------------*/
  182.  
  183. void GetAltCtrlShft( void )
  184. {
  185.    ClrWin( 1, 1, 80, 25, CTbl[7] );
  186.  
  187.    ColorMsg( 10, 15, CTbl[4], " I will use GetScrn to read the normal lines " );
  188.    ColorMsg( 10, 16, CTbl[5], "        Press any key to continue...         " );
  189.    ColorMsg(  1,  1, CTbl[6], "F1-Normal        F2-Normal        F3-Normal        F4-Normal        F5 -Normal" );
  190.    ColorMsg(  1,  2, CTbl[6], "F6-Normal        F7-Normal        F8-Normal        F9-Normal        F10-Normal" );
  191.    GetScrn(   1,  1, 160,     FnKeyBuf[0] );
  192.    DosKbdClr();
  193.    GetKey();
  194.  
  195.    ColorMsg( 10, 15, CTbl[4], "I will use GetScrn to read the Shft lines    " );
  196.    ColorMsg( 10, 16, CTbl[5], "        Press any key to continue...         " );
  197.    ColorMsg(  1,  1, CTbl[6], "F1-Shft          F2-Shft          F3-Shft          F4-Shft          F5 -Shft  " );
  198.    ColorMsg(  1,  2, CTbl[6], "F6-Shft          F7-Shft          F8-Shft          F9-Shft          F10-Shft  " );
  199.    GetScrn(   1,  1, 160,     FnKeyBuf[1] );
  200.    DosKbdClr();
  201.    GetKey();
  202.  
  203.    ColorMsg( 10, 15, CTbl[4], "I will use GetScrn to read the Ctrl lines    " );
  204.    ColorMsg( 10, 16, CTbl[5], "        Press any key to continue...         " );
  205.    ColorMsg(  1,  1, CTbl[6], "F1-Ctrl          F2-Ctrl          F3-Ctrl          F4-Ctrl          F5 -Ctrl  " );
  206.    ColorMsg(  1,  2, CTbl[6], "F6-Ctrl          F7-Ctrl          F8-Ctrl          F9-Ctrl          F10-Ctrl  " );
  207.    GetScrn(   1,  1, 160,     FnKeyBuf[2] );
  208.    DosKbdClr();
  209.    GetKey();
  210.  
  211.    ColorMsg( 10, 15, CTbl[4], "I will use GetScrn to read the Alt lines     " );
  212.    ColorMsg( 10, 16, CTbl[5], "        Press any key to continue...         " );
  213.    ColorMsg(  1,  1, CTbl[6], "F1-Atl           F2-Alt           F3-Alt           F4-Alt           F5 -Alt   " );
  214.    ColorMsg(  1,  2, CTbl[6], "F6-Alt           F7-Alt           F8-Alt           F9-Alt           F10-Alt   " );
  215.    GetScrn(   1,  1, 160,     FnKeyBuf[3] );
  216.    DosKbdClr();
  217.    GetKey();
  218. }
  219.  
  220. /*----------------------------------------------------------------*/
  221. /*                                                                */
  222. /*----------------------------------------------------------------*/
  223.  
  224. void DetectToggleKeys( void )
  225. {
  226.    int  i,Index;
  227.  
  228.    ClrWin( 1, 1, 80, 25, CTbl[7] );
  229.    WindowFP( 8, 1, 55, 12);
  230.    FrameWin( '╔', '╗', '╚', '╝', '═', '║', CTbl[15] );
  231.  
  232.    ColorMsg( 10, 3, CTbl[23], "             BiosKbdStat                     " );
  233.    ColorMsg( 10, 5, CTbl[10], " Pressing the Alt, Shft or Ctrl Toggle Keys  " );
  234.  
  235.    FillRowAttr( 24, 5, 3, CTbl[64] );
  236.    FillRowAttr( 29, 5, 4, CTbl[65] );
  237.    FillRowAttr( 37, 5, 4, CTbl[66] );
  238.  
  239.    ColorMsg( 10,  6, CTbl[10], " will display the function key lines at the  " );
  240.    ColorMsg( 10,  7, CTbl[10], " bottom of the screen.  The lines that are   " );
  241.    ColorMsg( 10,  8, CTbl[10], " being used were just saved using GetScrn    " );
  242.    ColorMsg( 10,  9, CTbl[10], " in the preceeding step.                     " );
  243.    ColorMsg( 10, 11, CTbl[48], "        Press <ENTER> to continue...         " );
  244.  
  245.    for ( i = 0; i != 13;   ) {
  246.       while ( !DosKbdHit() ) {
  247.          i = BiosKbdStat();
  248.          Index = 0;
  249.          if ( i & 3 )      Index = 1;
  250.          else if ( i & 4 ) Index = 2;
  251.          else if ( i & 8 ) Index = 3;
  252.  
  253.          PutScrn( 1, 24, 160, FnKeyBuf[Index] );
  254.       }
  255.       i = GetKey();
  256.    }
  257. }
  258.  
  259. /*-------------------------------------------------------------*/
  260. /* returns a string of length n                                */
  261. /*-------------------------------------------------------------*/
  262.  
  263. void IntStr( Num, NDigits, St )
  264. int   Num,NDigits;
  265. char  St[];
  266. {
  267.    int i;
  268.  
  269.    for ( i = NDigits-1; i >= 0; i-- ) {
  270.       St[i] = (char) (Num % 10 + 48);
  271.       Num /= 10;
  272.    }
  273. }
  274.  
  275. /*----------------------------------------------------------------*/
  276. /*                                                                */
  277. /*----------------------------------------------------------------*/
  278.  
  279. void DisplayVideoInformation( void )
  280. {
  281.    char  St[256];
  282.  
  283.    ClrWin( 1, 1, 80, 25, CTbl[7] );
  284.    WindowFP( 24, 9, 57, 17 );
  285.    ClrWin( 24, 9, 57, 17, CTbl[48] );
  286.    FrameWin( '╔', '╗', '╚', '╝', '═', '║', 48 );
  287.  
  288.    ColorMsg( 26, 9, CTbl[48], " GetVideoInfo " );
  289.  
  290.    strcpy( St, " Current mode         = " );
  291.    itoa( GetVideoMode(), &St[24], 10 );
  292.    ColorMsg( 25, 10, CTbl[48], St );
  293.  
  294.    strcpy( St, " Active mode          = " );
  295.    itoa( GetVideoPage(), &St[24], 10 );
  296.    ColorMsg( 25, 11, CTbl[48], St );
  297.  
  298.    strcpy( St, " Number cols          = " );
  299.    itoa( GetVideoCols(), &St[24], 10 );
  300.    ColorMsg( 25, 12, CTbl[48], St );
  301.  
  302.    strcpy( St, " Base Segment Address = " );
  303.    itoa( VioBaseSeg, &St[24], 16 );
  304.    ColorMsg( 25, 13, CTbl[48], St );
  305.  
  306.    ColorMsg( 25, 16, CTbl[48], " Press any key to continue..." );
  307.    GetKey();
  308. }
  309.  
  310. /*----------------------------------------------------------------*/
  311. /*                                                                */
  312. /*----------------------------------------------------------------*/
  313.  
  314. void UseEditSt( void )
  315. {
  316.    CHAR  St[256];
  317.    INT2  ChOfs = 1,
  318.         TE    = 0;
  319.  
  320.    ClrWin( 1, 1, 80, 25, CTbl[7] );
  321.    WindowFP( 8, 8, 50, 14 );
  322.    FrameWin( '╔', '╗', '╚', '╝', '═', '║', CTbl[48] );
  323.  
  324.    ColorMsg( 10, 10, CTbl[7],  "Enter your name:" );
  325.    ColorMsg(  9, 12, CTbl[48], "          Press <ENTER> to Quit          " );
  326.  
  327.    memset( St, '\0', 256 );
  328.  
  329.    EditSt( 10, 28, 48, 50, 1, 7, 0, 7000, 2000,
  330.            (VOID *) VCSet, (VOID *)TCSet, &ChOfs, &TE, (VOID *) St );
  331.  
  332.    ClrWin( 1, 1, 80, 25, CTbl[7] );
  333.    WindowFP( 5, 8, 75, 14 );
  334.    FrameWin( '╔', '╗', '╚', '╝', '═', '║', CTbl[48] );
  335.  
  336.    GotoxyAbs( 7, 10 );
  337.    printf( "Length of Input string returned = %u characters", strlen( St ) );
  338.    GotoxyAbs( 7, 12 );
  339.    printf( "Input string = *%s*", St );
  340.    ColorMsg( 20, 20, CTbl[6], "    Press any key to continue...    " );
  341.    GetKey();
  342. }
  343.  
  344. /*----------------------------------------------------------------*/
  345. /*                                                                */
  346. /*----------------------------------------------------------------*/
  347.  
  348. void DisplayRvsAttrScreen( void )
  349. {
  350.    char  St[256];
  351.    int   i,j,HiCur,LoCur,k = 0;
  352.  
  353.  
  354.    HiCur = ( VioCursor >> 8 );
  355.    LoCur = ( VioCursor & 0xff );
  356.  
  357.    SetCursorSize( 32, 32 );
  358.    ClrWin( 1, 1, 80, 25, CTbl[7] );
  359.  
  360.    WindowFP( 5, 2, 40, 19 );
  361.    FrameWin( '╔', '╗', '╚', '╝', '═', '║', CTbl[7] );
  362.    ColorMsg( 7, 2, CTbl[7], " Text with normal attributes " );
  363.  
  364.    WindowFP( 45, 2, 80, 19 );
  365.    FrameWin( '╔', '╗', '╚', '╝', '═', '║', CTbl[7] );
  366.    ColorMsg( 47,  2, CTbl[7], " Text with reverse attributes " );
  367.    ColorMsg( 30, 23, CTbl[6], "    Press <ESC> to skip...    " );
  368.  
  369.    for ( j = 0; j <= 16; j++ ) {
  370.       ClrWin(  6, 3, 39, 18, CTbl[7] );
  371.       ClrWin( 46, 3, 79, 18, CTbl[7] );
  372.       for ( i = 0; i < 16; i++ ) {
  373.  
  374.          TextAttr = (BYTE) k;
  375.          strcpy( St, "        TextAttr =                " );
  376.          IntStr( TextAttr, 3, &St[19] );
  377.          ColorMsg( 6, i+3, TextAttr, St );
  378.  
  379.          TextAttr = (BYTE) RvsAttr( TextAttr );
  380.          strcpy( St, "        TextAttr =                " );
  381.          IntStr( TextAttr, 3, &St[19] );
  382.          ColorMsg( 46, i+3, TextAttr, St );
  383.          k++;
  384.       }
  385.       for ( i = 0; i < 15000; i++ )
  386.       ;
  387.  
  388.  
  389.       if ( BiosKbdHit() )
  390.          if ( GetKey() == 1 )
  391.             j = 16;
  392.    }
  393.    TextAttr = 6;
  394.    SetCursorSize( LoCur, HiCur );
  395. }
  396.  
  397. /*----------------------------------------------------------------*/
  398. /*                                                                */
  399. /*----------------------------------------------------------------*/
  400.  
  401. void CheckMouse( void )
  402. {
  403.    INT2 NBut;
  404.  
  405.    ClrWin( 1, 1, 80, 25, CTbl[7] );
  406.  
  407.    WindowFP( 8, 10, 48, 15 );
  408.    FrameWin( '╔', '╗', '╚', '╝', '═', '║', CTbl[7] );
  409.  
  410.    if ( !MResetMouse( &NBut ) )
  411.       ColorMsg( 10, 12, CTbl[6], "Mouse NOT installed on your computer" );
  412.    else {
  413.       ColorMsg( 10, 12, CTbl[6], "You have a mouse in your computer" );
  414.       ColorMsg( 10, 13, CTbl[7], "Squeak Squeak Squeak"              );
  415.    }
  416.  
  417.    GetKey();
  418. }
  419.  
  420. /*-------------------- Main Line ------------------------*/
  421.  
  422. void main( void )
  423. {
  424.    int i,x,y;
  425.  
  426.    VioInit();
  427.  
  428.    GetScrn( 1, 1, 2000, Buffer );
  429.    x = WhereXAbs();
  430.    y = WhereYAbs();
  431.    i = 0;
  432.    if ( VioMode == 7 )
  433.       i = 1;
  434.    memcpy( CTbl, ColorTbl[i], sizeof( CTbl ) );
  435.  
  436.    OpeningScreen();
  437.    DisplayWindows();
  438.    GetAltCtrlShft();
  439.    DetectToggleKeys();
  440.    DisplayVideoInformation();
  441.    UseEditSt();
  442.    DisplayRvsAttrScreen();
  443.    CheckMouse();
  444.    PutScrn( 1, 1, 2000, Buffer );
  445.    GotoxyAbs( x, y );
  446. }
  447. 
  448.